using System;
using System.ServiceModel;

namespace Agron.Services.Contracts
{
    /// <summary>
    /// Callback interface for the <see cref="IBroadcastingService"/> service contract.
    /// </summary>
    public interface IBroadcastingServiceEvents
    {
        /// <summary>
        /// Fires when the mouse move in the host.
        /// </summary>
        /// <param name="userId">A <see cref="Guid"/> that contains the user id of the user logged on the service host.</param>
        /// <param name="displayName">A <see cref="String"/> that contains the display name of the user logged on the service host.</param>
        /// <param name="x">A <see cref="Int32"/> that contains the x-coordinate of the new mouse position.</param>
        /// <param name="y">A <see cref="Int32"/> that contains the y-coordinate of the new mouse position.</param>
        [OperationContract(IsOneWay = true)]
        void MouseMove(Guid userId, string displayName, int x, int y);

        /// <summary>
        /// Fires when the mouse's left button is down.
        /// </summary>
        /// <param name="userId">A <see cref="Guid"/> that contains the user id of the user logged on the service host.</param>
        /// <param name="displayName">A <see cref="String"/> that contains the display name of the user logged on the service host.</param>
        /// <param name="x">A <see cref="Int32"/> that contains the x-coordinate of the new mouse position.</param>
        /// <param name="y">A <see cref="Int32"/> that contains the y-coordinate of the new mouse position.</param>
        [OperationContract(IsOneWay = true)]
        void LeftButtonDown(Guid userId, string displayName, int x, int y);

        /// <summary>
        /// Fires when the mouse's left button goes up.
        /// </summary>
        /// <param name="userId">A <see cref="Guid"/> that contains the user id of the user logged on the service host.</param>
        /// <param name="displayName">A <see cref="String"/> that contains the display name of the user logged on the service host.</param>
        /// <param name="x">A <see cref="Int32"/> that contains the x-coordinate of the new mouse position.</param>
        /// <param name="y">A <see cref="Int32"/> that contains the y-coordinate of the new mouse position.</param>
        [OperationContract(IsOneWay = true)]
        void LeftButtonUp(Guid userId, string displayName, int x, int y);

        /// <summary>
        /// Fires when the mouse's wheel moves.
        /// </summary>
        /// <param name="userId">A <see cref="Guid"/> that contains the user id of the user logged on the service host.</param>
        /// <param name="displayName">A <see cref="String"/> that contains the display name of the user logged on the service host.</param>
        /// <param name="x">A <see cref="Int32"/> that contains the x-coordinate of the new mouse position.</param>
        /// <param name="y">A <see cref="Int32"/> that contains the y-coordinate of the new mouse position.</param>
        [OperationContract(IsOneWay = true)]
        void MouseWheel(Guid userId, string displayName, int x, int y);

        /// <summary>
        /// Fires when the mouse's right button goes down.
        /// </summary>
        /// <param name="userId">A <see cref="Guid"/> that contains the user id of the user logged on the service host.</param>
        /// <param name="displayName">A <see cref="String"/> that contains the display name of the user logged on the service host.</param>
        /// <param name="x">A <see cref="Int32"/> that contains the x-coordinate of the new mouse position.</param>
        /// <param name="y">A <see cref="Int32"/> that contains the y-coordinate of the new mouse position.</param>
        [OperationContract(IsOneWay = true)]
        void RightButtonDown(Guid userId, string displayName, int x, int y);

        /// <summary>
        /// Fires when the mouse's right button goes up.
        /// </summary>
        /// <param name="userId">A <see cref="Guid"/> that contains the user id of the user logged on the service host.</param>
        /// <param name="displayName">A <see cref="String"/> that contains the display name of the user logged on the service host.</param>
        /// <param name="x">A <see cref="Int32"/> that contains the x-coordinate of the new mouse position.</param>
        /// <param name="y">A <see cref="Int32"/> that contains the y-coordinate of the new mouse position.</param>
        [OperationContract(IsOneWay = true)]
        void RightButtonUp(Guid userId, string displayName, int x, int y);
    }
}
